package bst.bst_map;

import java.util.*;

public class Demo {
    public static void main(String[] args) {
        Map<String,String> m = new TreeMap<>();
        m.put("林冲","豹子头");
        m.put("武松","行者");
        m.put("宋江","及时雨");
        m.put("鲁智深","花和尚");
        //put(key,value) 如果 key 不存在时，插入 map 中
        String str = m.put("李逵","黑旋风");
        System.out.println(str);
        System.out.println(m.size());
        System.out.println(m);

        //key 不能为 null，但是 value 可以为 null
//        str = m.put(null,"无名");
        str = m.put("无名",null);
        System.out.println(m);

        //key 已经存在时，将 value 更新为新的 value ，返回旧的 value
        str = m.put("李逵","铁牛");
        System.out.println(str);

        //get(key)，key 存在时返回对于的 value ，不存在时返回 null
        System.out.println(m.get("李逵"));
        System.out.println(m.get("宋江"));
        System.out.println(m.get("吴用"));

        //getOrDefault(),如果 key 存在，则返回对应的 value ，如果 key 不存在，则返回一个默认值
        System.out.println(m.getOrDefault("李逵","无名"));      //map 中有 key 所以直接返回 “李逵” 对应的 value ，不会返回 “无名”
        System.out.println(m.getOrDefault("吴用","智多星"));

        //containKey(key):检测 map 中是否有 key，有则返回 true ，没有则返回 false
        //时间复杂度：O(log(n))
        System.out.println(m.containsKey("林冲"));
        System.out.println(m.containsKey("吴用"));

        //containsValue(value):检测 map 中是否有 value ，有则返回 true，没有则返回 false
        //时间复杂度：O(n)
        System.out.println(m.containsValue("智多星"));
        System.out.println(m.containsValue("行者"));

        //打印所有的 key
        for(String s:m.keySet()){
            System.out.print(s + " ");
        }
        //打印所有的 value
        System.out.println();
        for(String s : m.values()){
            System.out.print(s + " ");
        }
        //打印所有的 key + value
        System.out.println();
        for(Map.Entry<String,String> s : m.entrySet()){
            System.out.println(s.getKey() + "->" + s.getValue());
        }
    }
}
